package main

import (
	"bytes"
	"fmt"
	"os"
)

/*
错误处理
*/
//panic recover 类似 java中的try catch

func main() {
	f, err := os.Open("filename")
	defer f.Close()
	if err != nil {
		fmt.Println(err)
	}
	//defer f.Close()

	var c []byte
	b := bytes.NewBuffer(c)
	content, _ := f.Read(b.Bytes())
	fmt.Println(content)

	//f.Close()

	x, y := 1, 2
	defer func() { //recover 捕获到错误并继续执行程序，无论是正常或非正常错误
		if err := recover(); err != nil {
			fmt.Println(err)
			//……
		}
	}()

	fmt.Println(x, y+1)

	fmt.Println(testdefer())

	panic("panic")            //捕获错误并中断程序
	fmt.Println("test panic") //此行将不会打印
}

func testdefer() int {
	a := 100
	defer func() {
		fmt.Println("defer", a)
		a += 100
	}()
	/*	temp:=a
		return temp*/
	return a
}
